#! /bin/bash
## French version
### 	ATTENTION CE SCRIPT S'EXÉCUTE UNIQUEMENT EN ADMINISTRATEUR ET TERMINAL CONSOLE    ###

#  NVIDIA-MAKER
#  Sat Feb  6 16:58:20 2010
#  Copyright  2010  mk67
#  <rmk677@gmail.com>

#  This program is free software; you can redistribute it and/or modify
#  This program is free software; you can redistribute it and/or
#  modify it under the terms of the GNU Lesser General Public
#  License as published by the Free Software Foundation; either
#  version 2.1 of the License, or (at your option) any later version.
#  
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#  Lesser General Public License for more details.
#  
#  You should have received a copy of the GNU Lesser General Public
#  License along with main.c;if not, write to the Free Software
#  Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA

cd /
### VARIABLES
### -------------------------------------------------------
## Variables principales.
nvdir="/usr/local/src64/NVIDIA"
nvtar="$nvdir/tgz"					# répertoire des archives
nvtmp="$nvdir/temp"					# répertoire temporaire d'install
nvlog="$nvdir/log"					# répertoire de destination des logs
nvdl="$nvdir/release"					# répertoire d'archive des pilotes téléchargés
nvupdate="$nvdir/update"				# répertoire temporaire des mises à jour
logfile="--log-file-name=$nvlog/install.log"		# option nvidia-installer
temp="--tmpdir=$nvtmp"					# option nvidia-installer: rép temporaire d'install
dltemp="--tmpdir=$nvupdate"				# option nvidia-installer: rép temporaire update

## Variable du menu
A=" Depuis une archive locale."
B=" Depuis un paquet local."
C=" Depuis le serveur NVIDIA (assurez-vous de votre connection)."
D=" Construire uniquement une archive."
E=" Dé-installer un pilote"
F=" Arrêter le serveur X."
G=" Redemarrez le serveur X."
H=" Mises à jour disponible."
I=" Quitter." 

## Variables des couleurs assignées.
t='\e[0;39m'	#couleur normal du terminal
r='\e[1;31m'	#rouge
v='\e[1;32m'	#vert
y='\e[1;36m'	#cyan 
j='\e[1;33m'	#jaune

### FONCTIONS SYSTÈME
## card id 
board=$(lspci -nn | grep 'VGA' | awk '{ print $9" "$10" "$11" "$12" "$13 }' | tr '[[]]' ' ')
## vendeur
vendor=$(lspci -nn | grep 'VGA' | awk '{ print  $1" "$6" "$7 }')
## architechture
ARCH=`uname -a | awk '{ print $12 }'`
if [ $ARCH == "i686" ] || [ $ARCH == "i586" ] ; then
	ARCH="x86"
	RUN_PCK="pkg1"
else
	RUN_PCK="pkg2"
fi
## distribution
function distro(){
if [ -f /proc/version ] ; then
	version="cat /proc/version"
	cat /proc/version | grep ubuntu > /dev/null
	if [[ $? -eq 0 ]]; then
	DISTRO="UBUNTU"
	PKG_INSTALLER="apt-get install"
	fi
	cat /proc/version | grep mandriva > /dev/null
	if [[ $? -eq 0 ]]; then
	DISTRO="MANDRIVA"
	PKG_INSTALLER="urpmi"
	fi
else
	echo -e "\f$r Distribution indéterminée. Installez les dépendences manuellement "
fi
}
# contrôle des dépendances
function dep_control(){
	ls /usr/bin/lftp > /dev/null
	if [ $? -ne 0 ] ; then 
		echo -e "$v Les dépendences requises ne sont pas installées"; sleep 2
		echo -e "$y INSTALLATION EN COURS ..."
		PKG="lftp kernel-devel gcc wget"
		$PKG_INTALLER $PKG
		echo -e "$y INSTALLATION TERMINÉE. "
	fi
}
# Fonction de contrôle de la connection internet.
function ifnet(){
	for net in question ; do 
		if [ -n /sbin/ifconfig ] ; then
			if [[ "$( /sbin/ifconfig | grep 'ppp0' | awk '{print $1}' )" != "ppp0" ]] ; then
				net="ppp0"
			elif [[ "$( /sbin/ifconfig | grep 'eth0' | awk '{print $1}' )" != "eth0" ]] ; then
				net="eth0"
			elif [[ "$( /sbin/ifconfig | grep 'eth1' | awk '{print $1}' )" != "eth1" ]] ; then
				net="eth1"
			elif [[ "$( /sbin/ifconfig | grep 'wlan0' | awk '{print $1}' )" != "wlan0" ]] ; then
				net="wlan0"
			fi
		fi
		/sbin/ifconfig $net | awk '{print $2}' | sed -n '2p'
	done
}
# Contrôle primaire des connections X et réseau.
function xlocksession(){
	if [ -e /tmp/.X0-lock ] ; then				# TEST >> if [[ `runlevel | awk '{print $2}'` == 5 ]] ; then
		echo -e "\f$y  Je suis actuellement en mode Graphique. Je dois le stopper.\n  Une fois le terminal activée, relancez ce script en temps que ROOT.$t"
		echo -e "\f$v  Note:$y Si vous souhaitez uniquement vérifier les mises à jour disponibles,\n  il n'est pas nécessaire de stopper le serveur X.$t\f"
		if [[ `ifnet` == adr:127.* ]] ; then
			echo -e "$r  ATTENTION!$v Vous n'êtes pas connecter au réseau.\n Si je dois faire une mise à jour depuis le serveur, j'ai besoin d'être connecté.\n Relancez-moi après la connexion.$t\f"
		else
		echo -e "\f$v Voulez-vous que j'arrête la session X pour vous$j (o/n)?\n$v ==> $j\c"
		read -n 1 wilu ; echo -e "$v"
			if [ $wilu == "o" ] ; then
			echo -e "$y \f ATTENTION À VOS TRAVAUX EN COURS, FERMEZ VOS APPLICATIONS\r AVANT DE CONFIRMEZ CETTE COMMANDE"
			echo -e "$v\r\\t Tapez $j[C]$v pour confirmez.\n\t Si non, tapez$j [Q]$v pour quitter. "
				read -s -n 1 confirm
				if [ $confirm == Q ] ; then
					exit 1
				else
					if [ $confirm == C ] ; then
					echo -e "\t JE FAIS L'INIT ...." ; sleep 2
					/usr/sbin/gdm-stop
					fi
				fi
			fi
		#sleep 1 ; exit 1
		menu
		fi		
	fi
}
# retrait des liens et librairies d'origine
function rmlink(){
	function librmlk(){
		rm -vf $class/libGL.*
		rm -vf $class/libGLcore.*
		rm -vf $class/libcuda.*
		rm -vf $class/libXvMCNVIDIA.*
		rm -vf $class/libnvidia-cfg.*
		rm -vf $class/libnvidia-tls.*
		rm -vf $class/libvdpau.so.*
		rm -vf $class/libvdpau_nvidia.so.*
		rm -vf $class/libvdpau_trace.so.*
	}
	function xorgrmlk(){
		rm -vf $class/xorg/modules/libnvidia-wfb.*
		rm -vf $class/xorg/modules/extensions/libglx.*
	}
	function tlsrmlk(){
		rm -vf $class/tls/libnvidia-tls.*
	}
	lib64="/usr/lib64"
	lib32="/usr/lib"
	if [[ `uname -a | awk '{ print $15 }'` -eq 64 ]] ; then
		#for lib64 in rmlink ; do
		class=$lib64
		librmlk ; xorgrmlk ; tlsrmlk
		#done
		#for lib32 in rmlink ; do
		class=$lib32
		librmlk ; tlsrmlk
		#done
	else
		if [[ `uname -a | awk '{ print $15 }'` != 64 ]] ; then
			class=$lib32
			librmlk ; xorgrmlk ; tlsrmlk
		fi
	fi
}
# Création des liens internes à l'archive
function makelink(){
	function usrlink(){
		ln -s -f -T $class/libGL.so.* $class/libGL.so.1
		ln -s -f -T $class/libGL.so.1 $class/libGL.so
		ln -s -f -T $class/libGLcore.so.* $class/libGLcore.so.1
		ln -s -f -T $class/libcuda.so.* $class/libcuda.so.1
		ln -s -f -T $class/libcuda.so.1 $class/libcuda.so
		ln -s -f -T $class/libnvidia-cfg.so.* $class/libnvidia-cfg.so.1
		ln -s -f -T $class/libnvidia-cfg.so.1 $class/libnvidia-cfg.so
		ln -s -f -T $class/libnvidia-tls.so.* $class/libnvidia-tls.so.1
		ln -s -f -T $class/libvdpau.so.* $class/libvdpau.so.1
		ln -s -f -T $class/libvdpau.so.1 $class/libvdpau.so
		ln -s -f -T $class/libvdpau_nvidia.so.* $class/libvdpau_nvidia.so
		ln -s -f -T $class/libvdpau_trace.so.* $class/libvdpau_trace.so
	}
	function xorglink(){
		ln -s -f -T $class/libXvMCNVIDIA.so.* $class/libXvMCNVIDIA_dynamic.so.1
		ln -s -f -T $class/libXvMCNVIDIA_dynamic.so.1 $class/libXvMCNVIDIA_dynamic.so
		ln -s -f -T $class/xorg/modules/libnvidia-wfb.so.* $class/xorg/modules/libnvidia-wfb.so.1
		ln -s -f -T $class/xorg/modules/extensions/libglx.so.* $class/xorg/modules/extensions/libglx.so
	}
	function tlslink(){
		ln -s -f -T $class/tls/libnvidia-tls.so.* $class/tls/libnvidia-tls.so.1
	}
	lib64="/usr/lib64"
	lib32="/usr/lib"
	if [[ `uname -a | awk '{ print $15 }'` -eq 64 ]] ; then
		class=$lib64
		usrlink ; tlslink ; xorglink ; sleep 1
		class=$lib32
		usrlink ; tlslink ; sleep 1
	else
		if [[ `uname -a | awk '{ print $15 }'` != 64 ]] ; then
			class=$lib32
			usrlink ; tlslink ; xorglink ; sleep 1
		fi
	fi
}
# Listing des répertoires et fichiers.
function list(){
		#listdir="$tmplist"
		wlist=`ls -d $listdir$opt1$opt2$opt3 | sed 's|'$optlist'|--->  |' | cat -n`
		echo "$wlist"
		echo -e "\r$v Votre choix :\n ==>  $j\c"
		read list
		result=`echo "$wlist" | sed -n ''$list'p'`
		#echo ${result#*--> }
}
## Quelques vairable suplémentaires.
# type elf
function libclass(){
	if [[ $(uname -a | awk '{ print $15 }') == 64 ]] ; then
		ELF_TYPE="64"
	else
		ELF_TYPE=""	
	fi
}
# version installée
function version_id(){
	libclass
	version=$(echo /usr/lib$ELF_TYPE/xorg/modules/extensions/libglx.so.*)
	echo ${version#*so.}
}
# Contrôle des mises à jour
function check_update(){
	lftp -c "anon; cd ftp://download.nvidia.com/XFree86/Linux-$ARCH/ ; ls >> $nvtmp/drvlist ; cat latest.txt >> $nvtmp/last_up ; quit"
	LAST_IN=$(version_id)
	LAST_DRV=$(cat $nvtmp/last_up | awk '{ print $1 }')
	LAST_BETA=$(cat $nvtmp/drvlist | awk '{ print $9 }' | sort -gr | sed -n 1p)
	echo -e "\n\t$v La version installée est la :\t\t$j$LAST_IN "
	echo -e "\n\t$v La dernière version officielle est la :$j$LAST_DRV "
	echo -e "\n\t$v La dernière version BETA est la :\t$j$LAST_BETA "
}
### FONCTION D'INSTALLATION D'UN PILOTE ARCHIVÉ.
function from_archive(){
	echo -e "$v Choisissez l'archive dans la liste:$y\r"
	cd $nvtar
		listdir="$nvtar"
		opt1="/*"
		optlist="${listdir#*}"
	list
	drivertar=${result#*-->  /}
	echo -e "\n$v Vous avez choisi$j ${result#*-->  /}."
	echo -e "\n$r --->$y     DÉCOMPRESSION EN COURS!$r     <---$y\r"
	cd /
	echo -e "\n$j Retrait des liens et fichiers originaux...$y"
	rmlink
	cp -T `tar xvf $nvtar/$drivertar` /
	echo -e "\n$j Création des liens... $y\n"
	makelink
	libclass
	if [ -f /usr/lib$ELF_TYPE/xorg/modules/extensions/libglx.so.$(version_id) ] ; then
		ls -l /usr/lib$ELF_TYPE/xorg/modules/extensions/libglx.so.$(version_id) | awk '{ print " Liens mis à jour le " $6 " à " $7}'
		echo -e "\n$r >>$v L'opération s'est achevé normalement.$r<<"
	else
		echo -e "\n$v >>$r L'opération s'est achevé anormalement.$v<<"
		echo -e "\n$v Retour au menu principal. "
		menu
	fi
	echo -e "\n$v Je dois redémarrer le serveur X pour prendes en charge les changements."
	echo -e "$v Le voulez-vous?\n$j (o/n)$r ==>$j \c"
	read -n 1 dmrestart
		if [ $dmrestart == "o" ] ; then
			echo -e "$v Redémarrage du serveur X.\r" ; sleep 2
			modprobe -r nvidia ; depmod -qa
			modprobe nvidia ; dm_restart
			break
		else
			echo -e "$v\n" ; menu
		fi
}

### FONCTION D'INSTALLATIONS DEPUIS UN RÉPERTOIRE UTILSATEUR.
function from_directory(){
	function installdrv(){
		if [[ -s $driverep ]] ; then
			echo -e "\n$r --->$v     L'INSTALLATION COMMENCE, SOYEZ PATIENT!$r     <---$y\r"
			sh $driverep -a -n -q --ui=none $temp $logfile
			echo -e "$j Félicitation! votre pilote est installé.\n$y" ; sleep 2
			cd $nvtmp ; sh $driverep -x
			nvlv=`$nvdir/nvidia-installer --latest --ui=none | sed -n '5p' | awk '{ print $4 }'`			
			#drv_actu=`ls -D | grep '${nvlv%;*}'`		# liste les Répertoire NVIDIA présent
			if [ -x $driverep ] ; then
				#cp -f $driverrep/nvidia-installer $nvdir
				cp -f $driverep $nvdl/nv-update-${nvlv%;*}
				if [[ -f $nvdl/nv-update-${nvlv%;*} ]] ; then
					echo -e "\n$v Copie de sauvegarde du pilote$j ${nvlv%;*}$v effectuée,\n je pourrais procéder à l'archivage.\n"
					sleep 1
				else
					echo -e "\n$v La copie de sauvergarde du pilote$j ${nvlv%;*}$v s'est effectuée anormalement."
					echo -e "\n$v Le Script requiert cette copie pour l'archivage et d'autres opérations ultérieures."
					echo -e "\n$v Faites-le manuellement et/ou informez l'auteur de cette erreur."
					echo -e "\n$r ATTENTION$v ne faites aucun archivage\n avant d'avoir copier ce fichier\n dans le répertoire $nvdl !"
					echo -e "\n$v Pressez un touche pour continuer."
					read -n 1 ok
				fi				
			fi
			archivage
		else
			echo -e "\n$y Aïe!$v Vous n'avez pas de paquet NVIDIA valide dans ce répertoire \n Je vous suggère de rendre visite au site NVIDIA:\n"
			echo -e " Aller sur :$y http://www.nvidia.fr/Download/Find.aspx?lang=fr$v et revenez me voir!.$t\n"
			echo -e "\n$v Dois-je retourner au menu ou redémarrer le serveur X ? $j"
			select answer in "Retour au menu." "Redémarrer X." ; do
				case $answer in
					"Retour au menu.")
						menu
						;;
					"Redémarrer X.")
						dm_restart
						;;
				esac
			done
		fi
	}
	echo -e "$v Voici la liste des pilotes déjà présent dans le répertoire NVIDIA:$y\n"
	ls $nvdl
	echo -e "\n$v Voulez-vous utiliser l'une de ces versions ou en choisir une dans le répertoire utilisateur:$j\n"
		VP=" Version présente"
		RU=" Répertoire Utilisateur"
	select repo in "$VP" "$RU" ; do
		case $repo in
			"$VP")
				echo -e "$y" ; cd $nvdl
				echo -e "$v Voici ce que contient $nvdl : $y"
				listdir="$nvdl"
				opt1="/*"
				opt3=""
				optlist="${listdir#*}"
				list
				driver="${result#*-->  /}" 
				driverep="$nvdl/$driver" ; installdrv
			;;
			"$RU")
				# niveau primaire
				echo -e "$y" ; cd /home
				listdir="/home"
				opt1="/*"
				opt3="/"
				optlist="${listdir#}"
				list
				homerep="${result#*-->  $opt3}" ; echo $homerep
				cd $homerep
				echo -e "\n$v Je poursuit la recherche à partir de$j $homerep$y," ; sleep 1
				ls  -d /home/$homerep/* | sed 's|/home/'${homerep#*}'|--->  |'
				echo -e "\n$v Utilisez [TAB] pour compléter le chemin jusqu'à votre pilote :"
				echo -e "$v ==> $j\c"
				read -e driver
				driverep="/home/$homerep/$driver"
				chmod a+x $driverep
				installdrv
			;;
		esac
	done
}

### FONCTION D'INSTALLATIONS, MISE À JOUR DEPUIS INTERNET.
function from_net(){
# fonctions
	function last_pack(){
		echo -e "\n$r --->$v     MISE À JOUR, SOYEZ PATIENT!$r $y\r"
		wget -c --progress=bar:force ftp://download.nvidia.com/XFree86/Linux-$ARCH/$LAST_PACK/*$RUN_PCK* $nvupdate
		echo -e "\n$r --->$v     TÉLÉCHAREGEMENT TERMINÉ$r $y\r" ; sleep 1
		echo -e "\n$r --->$v     EXTRACTION DE L'ARCHIVE DU PAQUET$r $y\r" ; sleep 1
	}
	function installe(){
		#nvr=`$nvi | sed -n '6,$p'`
		nwdrv=`ls $nvupdate` ; echo "$nwdrv"
		sh $nwdrv -a -q -n --ui=none $dltemp $logfile
		# préparation pour l'archivage
		if [[ $(ls $nvupdate/$nwdrv) ]] ; then
			sh $nvupdate/$nwdrv -x
			cd ../
		else
			echo -e "\n$j Houston! Nous avons un problème, pas de répertoire temporaire!\n Retour au menu\n "
			sleep 1 ; menu
		fi
		drvrep=`ls -D | grep '$LAST_PACK'`		# liste les Répertoire NVIDIA présent
		cp -f $nvupdate/$drvrep/nvidia-installer $nvdir
		mv -T $nvupdate/$nwdrv $nvdl/nv-update-$LAST_PACK
		mv -f $nvupdate/* $nvtmp/
		chmod 755 $nvtmp/*
	}
# script
if [[ `ifnet` == adr:127.* ]] ; then
	echo -e "\f$v je ne suis pas connecté; \n Connectez-moi et relancez le script.$t"
	menu
else
	if [ -e $nvdir/nvidia-installer ] ; then
		cd $nvupdate
		# le binaire Nvidia à un peu de mal avec l'exec après transfert,
		# aidons-le un peu.
		check_update
		echo -e "\n\t$v Taper $j[C]$v pour sélectioner une de ces versions.\n\t Si non tapez $j[M]$v pour retourner au menu principal."
			read -s -n 1 confirm2
			if [ $confirm2 == C ] ; then
				echo -e "$v\n Veuillez choisir votre version:$j\r"
				A1="$LAST_DRV"
				A2="$LAST_BETA"
				PS3="`echo -e "\n$v Votre Choix$j ==>"` "
				select choice4 in "$A1" "$A2" ; do 
					case $choice4 in
						"$A1")
							echo -e "$v--->  Installation de la version officielle.  <---\r"
							LAST_PACK=$LAST_DRV
							last_pack
							installe
							rm -f $nvtmp/drvlist $nvtmp/last_up
							archivage
						;;
						"$A2")
							echo -e "$v--->  Installation de la version BETA.  <---\r"
							LAST_PACK=$LAST_BETA
							last_pack
							installe
							rm -f $nvtmp/drvlist $nvtmp/last_up
							archivage
						;;
					esac
				done
			else
				if [ $confirm2 == M ] ; then
					rm -f $nvtmp/drvlist $nvtmp/last_up
					sleep 1 ; menu
				fi
			fi
	else
		echo -e "$j Ooops!$v Je n'ai pas le script nvidia-installer dans mon répertoire.\n Je suis obliger d'installer le pilote depuis un paquet local "
		sleep 1 ; $B
	fi
fi
}



### ARCHIVAGE. ###
function drivercall(){
	ls $nvtmp | grep $(version_id)
} 
# sous fonction CHOIX DE MÉTHODE
function archivage(){
echo -e "$v Je peux maintenant archiver ce pilote,\n Le désirez-vous?$j (o/n)$v:"
	echo -e "\n$v ==>$j \c" ; read -n 1 archive
	case $archive in
		Y|y|O|o)
			echo -e "\n$v Contrôles..." ; sleep 1
			echo -e "$y $(ls -d $nvtmp/$(drivercall))"
			cd $nvtmp
			if [ -f $(ls $nvtmp | grep $(version_id))/LICENSE ] ; then
				echo -e "\n$v\"$j $(drivercall) $v\" est présent et correctement décompressé.\n$y"
			else
				echo -e "\n$v Le$r répertoire de travail temporaire$v est vide.\n Une erreur dans le script ?."
				sleep 1
			fi
			archive ; sleep 1
			echo -e "$v\n Je dois maintenant redémarrer le serveur X" ; sleep 1
	 		echo -e "$v\n Séléctionnez$j$G$v dans le menu.\n"
			rm -f -R $nvtmp/*
			sleep 2 ; menu
			;;
		N|n)
			rm -f -R $nvtmp/*
			echo -e "$v\n Je pourrais construire ultérieurement cette archive\n à patir de l'index$j$D$v du menu." ; sleep 1
			echo -e "$v\n Je dois maintenant redémarrer le service dm"
	 		echo -e "$v\n Séléctionnez$j$G$v dans le menu.\n"
			sleep 2 ; menu
	 		;;
	esac
}

### ARCHIVAGE PROPREMENT DIT
function archive(){
cd $nvtmp
## fonction d'archivage
 	function do_tar(){
		if [[ -d $nvtmp/$nvrep ]] ; then
			echo -e "\n$r>>$j Création de l'archive $(version_id). $r <<$y\n" ; sleep 2
		else
			echo -e "\n$r Le répertoire de travail temporaire est absent"
			echo -e "\n$v Vérifier votre paquet ou contacter l'auteur si le script est en cause$y\n" ; sleep 1
			rm -f -R $nvtmp/* ; menu
		fi
		tmpdir=$(version_id)
		mkdir  -v -p $tmpdir
		if [ -d $nvtmp/$tmpdir ] && [ -d $nvtmp/$nvrep ] ; then
				mkdir -p $tmpdir/lib/modules/`uname -r`/kernel/drivers/video
				mkdir -p $tmpdir/usr/lib
				mkdir -p $tmpdir/usr/lib/tls
				mkdir -p $tmpdir/usr/bin
				mkdir -p $tmpdir/usr/include
				mkdir -p $tmpdir/usr/share
				cp /lib/modules/`uname -r`/kernel/drivers/video/nvidia.ko $tmpdir/lib/modules/`uname -r`/kernel/drivers/video/
				cp $nvrep/usr/bin/* $tmpdir/usr/bin/
				cp  -R $nvrep/usr/include/* $tmpdir/usr/include/
				cp  -R $nvrep/usr/share/* $tmpdir/usr/share/
			if [[ `uname -a | awk '{ print $15 }'` == 64 ]] ; then
				mkdir -p $tmpdir/usr/lib64/xorg/modules
				mkdir -p $tmpdir/usr/lib64/tls
				cp $nvrep/usr/X11R6/lib/* $tmpdir/usr/lib64/
				cp  -R $nvrep/usr/X11R6/lib/modules/* $tmpdir/usr/lib64/xorg/modules/
				cp  -R $nvrep/usr/lib/* $tmpdir/usr/lib64/
				cp  -R $nvrep/usr/lib32/* $tmpdir/usr/lib/
			else
				mkdir -p $tmpdir/usr/lib/xorg/modules
				cp  $nvrep/usr/X11R6/lib/* $tmpdir/usr/lib/
				cp  -R $nvrep/usr/X11R6/lib/modules/* $tmpdir/usr/lib/xorg/modules/
				cp  $nvrep/usr/lib/* $tmpdir/usr/lib/
			fi
			cd $tmpdir ; tar cvf $nvtar/$tmpdir-`uname -r`.tar.gz ./lib ./usr	
			cd $nvdir ; rm -R $nvtmp/*
			echo -e "\n$v  Votre archive est crée.\n  Elle existe sous le nom$j $tmpdir-`uname -r`"
			sleep 1
		else
			echo -e "$y Houston ! Nous avons un problème ! \n$v Un petit bug dans la creation de l'archive? "
			echo -e " Vérifier le script ou contactez l'auteur!"
			rm -f -R $nvtmp/* ; menu
		fi
	}

echo -e " $(drivercall)"
# analyse la version du pilote actuel avant extraction du pkg.run
	if [ -f $nvdl/nv-update-$(version_id) ] ; then
		pkg="`ls $nvdl | grep $(version_id)`" 
		echo -e "$y La version du pilote installé est la$j $(version_id)."
		echo -e "$y La version du paquet est la$j ${pkg#*te-}.$y"
		if [[ -d $(drivercall) ]] ; then
			echo -e "$r Le répertoire est déjà présent,$y\n je ne procède pas à l'extraction."
			sleep 1
		else
			echo -e "$r Le répertoire n'est pas présent,$y\n je procède à l'extraction."
			sh $nvdl/$pkg -x
		fi
		nvrepls=`ls $nvtmp | grep 'NVIDIA'`
		nvrep=`echo ${nvrepls%/}`; 
		ls -v $nvtmp | grep '$(version_id)'
			if [[ -d $nvtmp/$nvrep ]] ; then
				echo -e "\f$r>>$y $nvrep prêt ! $r <<$y\n" ; sleep 2
			else
				echo -e "\f$j $nvrep absent...vérifier votre paquet et/ou le script$y\n" ; sleep 1
				rm -f -R $nvtmp/* ; menu
			fi
		do_tar
		rm -f -R $nvtmp/* ; menu
		menu
	else
	    echo -e "$y Le répertoire$j $(version_id)$y n'existe pas.$v\n"
	    echo -e "$v Retour au menu principal.\n"
	    rm -f -R $nvtmp/* ; menu
	fi
}

### REDÉMARRAGE SESSION X
function dm_restart(){
	if [[ -e /tmp/.X0-lock ]] ; then
	    if [[ -e /var/run/gdm.pid ]] ; then
		gdm-stop ; gdm
	    else
		killall gdm-binary ; gdm
	    fi
	else
	    killall gdm-binary ; gdm
	fi
}
### Modèle de fonction
function uninstall(){
	echo -e "\n$r --->$y     DÉ-INSTALLATTION EN COURS!$r     <---$y\r"
	sh $nvdir/nvidia-installer --uninstall
	echo -e "\f$v Fait, retour au menu. \n" ; sleep 2
	menu
}
### MENU D'APPEL
function menu(){
echo -e "$v\n Méthode d'installation:$j\r"
PS3="`echo -e "\n$v Votre Choix$j ==>"` "
select choice in "$A" "$B" "$C" "$D" "$E" "$F" "$G" "$H" "$I"; do 
	
	case $choice in
		"$A")
			echo -e "$v--->  Installation depuis une archive locale.  <---\r" ; from_archive
		;;
		"$B")
			echo -e "$v--->  Mise à jour depuis un paquet local NVIDIA.  <---\r" ; from_directory	
		;;
		"$C")
			echo -e "\n$r--->$v  Retrait des informations depuis le serveur NVIDIA.$r  <---$v\n" ; from_net
		;;
		"$D")
			echo -e "\n$r--->$v  Archivage d'un pilote actif précédement installer$r <---\n$y" ; archive
		;;
		"$E")
			echo -e "$v--->  Procédure de déinstallation le pilote courant <---\r" ; uninstall
		;;
		"$F")
			echo -e "$v Arrêt de l'interface Graphique "
			sleep 2 ; /usr/sbin/gdm-stop ; exit 1
		;;
		"$G")
			echo -e "$v Redemarrage de l'interface Graphique "
			sleep 2 ; dm_restart ; exit 0
		;;
		"$H")
			echo -e "$v\t Retrait de la liste ... \f"
			sleep 1 ; check_update ; rm -f $nvtmp/drvlist $nvtmp/last_up ; menu
		;;
		"$I")
			echo -e "$t\n" ; exit 0
		;;
	esac
done
}

### PREMIÈRE MISE SERVICE
echo -e "\f\t$j          --- BIENVENU DANS LE BIDULEUR NVIDIA ---         \r"
echo -e "\t$j        --- le magouilleur de pilotes propriétaires ---         \f" ; sleep 1
echo -e "\f$v  Ce script va vous aidez à installer, mettre à jour, archiver,\r"
echo -e "  vos pilotes Nvidia. Il vous permettra un retour rapide à \r"
echo -e "  votre version préférée en cas de bug ou d'insatisfaction.\n"
#echo -e " Ce script ne doit être utilisé qu'avec les privilèges administrateur

## Création des répertoires si énixistant.:
distro
echo -e "$v  Système :\ŧ\t $j$DISTRO$v \n  Type processeur :\t $j$ARCH \n Carte :\t\t$j$board \n"
echo -e "$v  Contrôle de présence des répertoires de travail.\n"
mkdir -p $nvdir $nvtar $nvtmp $nvlog $nvupdate $nvdl
chmod a+x $nvdl/*
## dep control
dep_control
presence=`ls -Cd $nvdir`
echo -e "$v Les répertoires $j${presence#*4/} MAKER$v sont présent." #; ls $nvdir 
if [ $? -eq 0 ] ; then
	xlocksession
	else
	if [ $? -ne 0 ] ; then 
		echo -e "$y\f\t		Le répertoire n'existe pas\f"
		echo -e "$v  Entrez le chemin de votre choix, ma préférence est /usr/local/src/"
		echo -e "$v  Mais rien ne vous y oblige:\n   $y==>$j \c"
		read -e sourcedir
		mkdir -p $sourcedir/NVIDIA
			if [ $? -eq 0 ] ; then
				sed -i "29cnvdir=\"$sourcedir/NVIDIA\"" /usr/local/bin/nvidia-maker-*.sh
			fi
	fi
fi
### SCRIPT D'INTRO
menu
exit 0
